home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / zc / src / word.c < prev    next >
Text File  |  1995-06-30  |  2KB  |  121 lines

  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.    char    rbuf[80],text[160], tmp[80];
  6.    char *textp, *cutp;
  7.    unsigned int    textlen, cutlen, ret_code, i;
  8.    FILE    *fp;
  9.  
  10.    fp = fopen("dat","r");
  11.    while(fgets(rbuf, 80, fp)){
  12.       memset( text, 0, sizeof(text));
  13.       Norm_line( rbuf, text);
  14.  
  15.       textp = text;
  16.       textlen=strlen(text) - 1;    /* 改行記号は無視    */
  17.       printf("-------------------\nInput = %s,len=%u \n",textp,textlen);
  18.  
  19.       i = 1;
  20.       ret_code = 0;
  21.       while(ret_code == 0 ){    /*    テキスト終まで */
  22.          ret_code = Get_word(&textp, &textlen, &cutp, &cutlen);
  23.          if( ret_code == -2 || ret_code == -10){    /* デミリタばかり */
  24.             break;
  25.          }
  26.          memcpy(tmp, cutp, cutlen);
  27.          tmp[cutlen] = 0;
  28.          printf("%u: word=%s len = %u next=%s nextlen=%u\n",i,tmp,cutlen, textp,textlen);
  29.          i++;
  30.       }
  31.    }
  32.    fclose(fp);
  33.    return;
  34. }
  35.  
  36. /***************************************************************************
  37.   単語きりだし
  38. **************************************************************************/
  39. int Get_word( textp, textlen, wordp, wordlen )
  40. char    **textp;
  41. unsigned int *textlen;
  42. char    **wordp;
  43. unsigned int *wordlen;
  44. {
  45.    unsigned int len, len2;
  46.    char *top, *btm;
  47.  
  48.    len = *textlen;
  49.    top = *textp;
  50.  
  51.    if( (len == 0) || (top == NULL) ){
  52.       return(-10);    /* パラメータエラー */
  53.    }
  54.  
  55.    while( len > 0){
  56.       if( *top != ' ' ){
  57.          break;
  58.       }
  59.       top ++;
  60.       len --;
  61.    }
  62.  
  63.    *wordp = top;   
  64.  
  65.    btm = top;
  66.    len2 = 0;
  67.    while( len > 0){
  68.       if( *btm == ' ' ){
  69.          break;
  70.       }
  71.       btm ++;
  72.       len --;
  73.       len2 ++;
  74.    }
  75.    
  76.    *wordlen = len2;
  77.  
  78.    *textp = btm;
  79.    *textlen = len;
  80.  
  81.    if(top == btm){
  82.       return(-2);        /* デミリタばかり(テキスト終)    */
  83.    }
  84.    if(len == 0){
  85.       return(-1);        /* テキスト終                    */
  86.    }else{
  87.       return(0);        /* 次がある                        */
  88.    }
  89. }
  90.  
  91. /***************************************************************************
  92.   文字列正規化
  93. **************************************************************************/
  94. int    Norm_line(intext, outtext)
  95. char    *intext;
  96. char    *outtext;
  97. {
  98.    int    len;
  99.    char    c;
  100.  
  101.    len=strlen(intext);
  102.    while(len > 0){
  103.       switch(*intext){
  104.       case ')':
  105.       case ',':
  106.          *outtext = ' ';
  107.          break;
  108.       case ';':
  109.          *outtext = ' ';
  110.          *outtext ++;
  111.       default:
  112.          *outtext = *intext;
  113.          break;
  114.       }
  115.       outtext ++;
  116.       intext  ++;
  117.       len --;
  118.    }
  119.    return;
  120. }
  121.